<?php
/**
 * Created by PhpStorm.
 * User: DSPC
 * Date: 2018/10/22
 * Time: 16:21
 */

namespace App\Utils;

/**
 * 正则表达式
 * Class Regex
 * @package App\Utils
 */
final class Regex
{

    // 正则数据集
    const regex = [
        // 手机号码
        'phone' => '/^((1[0-9][0-9])|(166)|(199)|(181)|(17[0-9])|(15[^4\\D])|(18[0,2,5-9]))\\d{8}$/',
        // 账户密码 - 最少8位，最多18位(首位字母，需包含大写字母、小写字母、数字、特殊符号)
//        'password' => '/^(?=[a-zA-Z])(?=.*\d)(?=.*[$@$!%*?&])(?=.*[a-z])(?=.*[A-Z])[A-Za-z\d$@$!%*?&]{8,18}/',
        // 账户密码 - 最少6位，最多18位(字母数字组合)
        'password' => '/^(?![\d]+$)(?![a-zA-Z]+$)(?![!#$%^&*]+$)[\da-zA-Z!#$%^&*\/\.]{6,18}$/',
        // 账户密码
//        'password' => '/^[a-zA-Z\d\\W]{6,18}$/',
        // 短信验证码
        'captcha' => '/^\d{6}$/',
        // 身份证号码
        'id_card' => '/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|[xX])$/',
        // 电子邮件
//        'email' => '/^([A-Za-z0-9_\-\.])+\@(qq.com|163.com)$/',
        'email' => '/^[A-Za-z\\d]+([-_.][A-Za-z\\d]+)*@([A-Za-z\\d]+[-.])+[A-Za-z\\d]{2,4}$/',
        // 日期格式
        'date' => '/^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/',
        // 时间格式
        'time' => '/^(20|21|22|23|[0-1]\d)(:[0-5]\d:[0-5]\d|:[0-5]\d)$/',
        // 微信条码
        'wechat_bar_code' => '/^1[0-5]\d{16}$/',
        // 支付宝条码
        'alipay_bar_code' => '/^(?:2[5-9]|30)\d{14,18}$/',
        // 支付宝或微信条码
        'wechat_alipay_bar_code' => '/^(?:1[0-5]\d{16}|(?:2[5-9]|30)\d{14,18})$/',
        // 时间日期
        'datetime' => '/^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\s+(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/',
    ];

    /**
     * 正则验证
     * @param $key
     * @param $value
     * @return bool
     */
    public static function check($key, $value) {
        return preg_match(self::regex[$key], $value) ? true : false;
    }
}
